package matrix;

public class setZeroes {
    // 法一：定义一个m*n的矩阵
    // 法二：定义m+n的数组，这里直接用法二实现
    public static void setZeroes(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        // 前m个表示每行，后n个表示没列
        boolean[] mark = new boolean[m + n];
        // 遍历数组
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == 0) {
                    mark[i ] = true;
                    mark[m  + j] = true;
                }
            }
        }
        for (int i = 0; i < mark.length; i++) {
            if (mark[i]) {
                if (i < m) {
                    for (int j = 0; j < n; j++) {
                        matrix[i][j] = 0;
                    }
                } else {
                    for (int j = 0; j < m; j++) {
                        matrix[j][i - m] = 0;
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        // int[][] matrix = new int[][] { { 1, 1, 1 }, { 1, 0, 1 }, { 1, 1, 1 } };
        int[][] matrix = new int[][] { { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 } };
        // int[][] matrix = new int[][] { { 0,1, 2, 0 }, { 3,4,5,2 }, { 1, 3,1, 5 } };
        setZeroes(matrix);
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                System.out.println(matrix[i][j]);
            }
            System.out.println("================");
        }
    }
}
